package service;

import hbt.DataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;

import modelo.AperturaMesaDao;
import modelo.PedidoDao;
import beans.AperturaMesaBean;
import beans.ItemCartaBean;
import beans.PedidoBean;
import entities.AperturaMesaEntity;
import entities.ItemCartaEntity;
import entities.PedidoEntity;


public class PedidoSrv {
	
	private static PedidoSrv instancia = null;
	public static PedidoSrv getInstancia() {
		if( instancia == null) {
			instancia = new PedidoSrv();
		}
		return instancia;
	}
	

	@SuppressWarnings("null")
	public List<PedidoBean> obtenerPedidos() {
		List<PedidoEntity> listaEntities = PedidoDao.getInstancia().obtenerPedidos();
		List<PedidoBean> listaBeans = new ArrayList<PedidoBean>();
		for (PedidoEntity entity : listaEntities) {
			PedidoBean bean = this.entity2Bean(entity);
			listaBeans.add(bean);
		}
		return listaBeans;
	}


	public PedidoBean entity2Bean(PedidoEntity pedidoEntity) {
		PedidoBean pedidoBean = new PedidoBean();
		pedidoBean.setId(pedidoEntity.getId());
		pedidoBean.setEstado(pedidoEntity.getEstado());
		List<ItemCartaEntity> itemsCarta = new ArrayList<ItemCartaEntity>();
		List<ItemCartaBean> itemsCartaBean = new ArrayList<ItemCartaBean>(); 
		itemsCarta = pedidoEntity.getItems();
		for (ItemCartaEntity itemCartaEntity : itemsCarta) {
			ItemCartaBean bean = ItemCartaSrv.getInstancia().entity2Bean(itemCartaEntity);
			itemsCartaBean.add(bean);
		}
		pedidoBean.setItems(itemsCartaBean);
		return pedidoBean;
	}
	
	public PedidoEntity bean2Entity(PedidoBean pedido) {
		PedidoEntity pedidoEntity = new PedidoEntity();
		pedidoEntity.setEstado(pedido.getEstado());
		pedidoEntity.setId(pedido.getId());
		List<ItemCartaEntity> itemsCartaEntity = new ArrayList<ItemCartaEntity>();
		List<ItemCartaBean> itemsCarta = new ArrayList<ItemCartaBean>(); 
		itemsCarta = pedido.getItems();
		for (ItemCartaBean itemCartaBean : itemsCarta) {
			ItemCartaEntity entity = ItemCartaSrv.getInstancia().bean2Entity(itemCartaBean);
			itemsCartaEntity.add(entity);
		}
		pedidoEntity.setItems(itemsCartaEntity);	
		return pedidoEntity;
	}

/*	public ArrayList<AperturaMesaBean> obtenerAperturasPorMozo(Integer legajo) {
		
		ArrayList<AperturaMesaEntity> listaEntities = AperturaMesaDao.getInstancia().obtenerAperturasPorMozo(legajo);
		ArrayList<AperturaMesaBean> listaBeans = new ArrayList<AperturaMesaBean>();
		for (AperturaMesaEntity entity : listaEntities) {
			AperturaMesaBean bean = this.entity2Bean(entity);
			listaBeans.add(bean);
		}
		return listaBeans;
	}*/
	
	

	public boolean guardarPedido(PedidoBean pedidoBean,Integer aperturaMesa) {
		PedidoEntity pedidoEntity = this.bean2Entity(pedidoBean);
		PedidoDao.getInstancia().save(pedidoEntity);
		
		Integer idUltimoPedido = PedidoDao.getInstancia().obtenerUltimoIdPedido();
		
		PreparedStatement stmt = null;
			Connection con = null;
			try {
				String query = "UPDATE pedidos SET idAperturaMesa = ? WHERE id = ?";
				con = DataSource.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1,aperturaMesa);
				stmt.setInt(2,idUltimoPedido);
				stmt.execute();
				
			} 
			catch (Exception e) {
				e.printStackTrace();
			} finally {
				DataSource.cerrarConexion(stmt);
			}
		
		return true;
		
	}

	
	
}

